home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Acorn User: China
/
Acorn User China CD-ROM (UK) (Disc B)
/
Acorn User China CD-ROM (UK) (Disc B).bin
/
STUTTGART
/
SOUND
/
PLAYTRAC00
/
!PlayTrack_!RunImage
(
.txt
)
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
RISC OS BBC BASIC V Source
|
1994-02-04
|
54.8 KB
|
2,438 lines
>$.!PlayTrack.!RunImage
1992
tellemoff("Fatal error: (type="+
+") "+
$+" Re-run & try again."):
"Wimp_CloseDown":
errors in this bit of code cannot be dealt with - quit immediately
If you try, templates might not be loaded, menus not defined etc.
q% 800,useful% 700,ind% &200,ind2% &300,menu% 300,pointer% 400
icontext% 36,iconvalid% 36,ind3% &200,ind4% &300,open% 650
indtext% 256:indptr%=0
ind5% &200,channel(8),ind6% &150,ind7% &100,ind8% &200,ind9% &200
ind10% &100,ind11% &20,code% 700,ind12% &100,ind13% &20,ind14% &20
samps% 32*31,volume% 4*31,samplen% 6*31,valid% 3,text% 30:$valid%="z4"
cd$(75),ch%(7):ch%()=
I$text%="No:":$(text%+8)="Name:":$(text%+16)="Vol:":$(text%+24)="Len:"
<edited%=
:playing%=
:speaker=
:buffersize%=0:lenbytes%=0
8copen%=
:topen%=
:sopen%=
:vopen%=
:type=0:newicn%=
=sicn%=0:nscn%=
:cmos%=42:cmos2%=43:oopen%=
:lap%=
:scr%=
3dos%=
:afs%=
:vuopen%=
:mute%=
:mak%=
:wopen%=
?show%=
:cropen%=
:track%=1:com%=
:ap%=
:clock$="48":buff%=0
Gworkspc%=0:cdpos%=-1:cding%=
:cdir$="":cdmax%=-1:donezero%=
:pti%=0
dragvol%=
:pc=1:c=-1
$q%="TASK"
"Wimp_Initialise",200,!q%,"PlayTrack"
,taskh%
"Interface_Initialise",,taskh%:
claim Interface pointers
)lock%=
(2000):
"Tracker_Lock",lock%
"Wimp_OpenTemplate",,"<PlayTrack$Dir>.Templates"
"Wimp_LoadTemplate",,q%,ind%,ind%+&200,-1,"info",0
"Wimp_CreateWindow",,q%
infowind%
"Wimp_LoadTemplate",,q%,ind2%,ind2%+&300,-1,"saveas",0
"Wimp_CreateWindow",,q%
saveas%
"Wimp_LoadTemplate",,q%,ind3%,ind3%+&200,-1,"control",0
"Wimp_CreateWindow",,q%
control%
"Wimp_LoadTemplate",,q%,ind4%,ind4%+&300,-1,"tuneinfo",0
"Wimp_CreateWindow",,q%
tuneinfo%
"Wimp_LoadTemplate",,q%,ind5%,ind5%+&200,-1,"stereo",0
"Wimp_CreateWindow",,q%
stereo%
"Wimp_LoadTemplate",,q%,ind6%,ind6%+&150,-1,"buffer",0
"Wimp_CreateWindow",,q%
buffer%
"Wimp_LoadTemplate",,q%,ind7%,ind7%+&100,-1,"oddformat",0
"Wimp_CreateWindow",,q%
odd%
"Wimp_LoadTemplate",,q%,ind8%,ind8%+&200,-1,"helptext",0
"Wimp_CreateWindow",,q%
help%
"Wimp_LoadTemplate",,q%,ind9%,ind9%+&200,-1,"register",0
"Wimp_CreateWindow",,q%
register%
"Wimp_LoadTemplate",,q%,ind10%,ind10%+&100,-1,"options",0
"Wimp_CreateWindow",,q%
options%
"Wimp_LoadTemplate",,q%,ind11%,ind11%+&20,-1,"vumeter",0
"Wimp_CreateWindow",,q%
vumeter%
"Wimp_LoadTemplate",,q%,ind12%,ind12%+&100,-1,"waveform",0
"Wimp_CreateWindow",,q%
waveform%
"Wimp_LoadTemplate",,q%,ind13%,ind13%+&20,-1,"wavepane",0
"Wimp_CreateWindow",,q%
wavepane%
"Wimp_LoadTemplate",,q%,ind14%,ind14%+&20,-1,"cro",0
"Wimp_CreateWindow",,q%
cro%
"Wimp_CloseTemplate"
samps_wind
get_register
load_opts
scr%
"Sound_Configure",,,
clock$
buffer(
buffer$)
assemble:!vu_block%=pointer%
"Sound_Speaker",0
oldspeak%:
"Sound_Enable",0
oldmute%
A7sccb%=start%+&1850:
Start of SCCB in TrackerModule
BKdragstart%=
swi("DragASprite_Start"):dragstop%=
swi("DragASprite_Stop")
"OS_Byte",161,28
,,byte%:
(byte%
2)=0
dragstart%=-1:dragstop%=-1
D?h%=
("<PlayTrack$Dir>.Font"):len%=
#h%:fontlen%=len%-1
font% len%:
"OS_File",&FF,"<PlayTrack$Dir>.Font",font%
F3iconb%=
iconbar("playtrack0"):
icon on iconbar
G<
-1 = Utility (RHS)
H<
-2 = Service (LHS)
J#quit%=
Nothing happened yet!
"Tracker_Stereo",4,,,,lock%:
I=1
stereo(I,4):channel(I)=4:
registered%=
pirate%=
setup_mess1:
hold_it(help%)
"Wimp_CreateMenu",,register%,640,900
error("Error: "+
$+" (code "+
+") Quit ? (Buffer="+
~workspc%+")",3)=1:
"Interface_CloseDown",,taskh%:
"Tracker_Stop",,,,,lock%:
"Sound_Speaker",oldspeak%:
"Sound_Enable",oldmute%:
"Tracker_Unlock",lock%:
tidy:
"Wimp_CloseDown":
Error handler drops through to wimp_poll loop, AFTER wimp_initialise
"Wimp_Poll",,q%
reason%:
and poll the wimp.
"Interface_PreProcessKey",reason%,q%,taskh%
"Interface_Poll",reason%,,taskh%:
Ensure pointer up to date
reason%
0 :
newicn%
Y
type
[<
puticonsprite(win%,icn%,"selon")
\<
puticonsprite(win%,icn%,"seloff")
newicn%=
`-
x%,y%,b%:
nscn%
b%=0
a
sicn%
c;
0 :
puticonsprite(control%,0,"rev")
d;
4 :
puticonsprite(control%,4,"fwd")
nscn%=
h-
b%<>0
dragvol%
volume
i-
b%=0
dragvol% dragvol%=
jG pointer%!0=vumeter%:
"Wimp_GetWindowState",,pointer%
k-
(pointer%!32
1<<16)<>0
l>
"Wimp_ForceRedraw",vumeter%,0,-280,310,0
cropen%
o:
"Wimp_ForceRedraw",cro%,0,-200,150,0
q) pti%+=1:
pti%>13 pti%=0
pointer%!0=-2:pointer%!4=iconb%:
"Wimp_GetIconState",,pointer%:pointer%!8=0:pointer%!12=0:$(pointer%!32)="Splaytrack"+
pti%:
"Wimp_SetIconState",,pointer%
1 :
redraw
2 :
"Wimp_OpenWindow",,q%
u"
!q%=waveform%
vF !q%=wavepane%:q%!4+=20:q%!8+=20:q%!12-=20:q%!16-=80
wI !pointer%=wavepane%:
"Wimp_GetWindowState",,pointer%
x6 q%!20=pointer%!20:q%!24=pointer%!24
y+
"Wimp_OpenWindow",,q%
3 :
"Wimp_CloseWindow",,q%
|!
!q%=control%
copen%=
~$
tickmenu(open%,0)
!
shut(control%)
"
!q%=tuneinfo%
topen%=
$
tickmenu(open%,1)
"
shut(tuneinfo%)
!q%=stereo%
sopen%=
$
tickmenu(open%,2)
shut(stereo%)
!
!q%=samples%
vopen%=
$
tickmenu(open%,3)
!
shut(samples%)
!q%=buffer%
bopen%=
$
tickmenu(open%,4)
shut(buffer%)
!
!q%=options%
oopen%=
%
tickmenu(open%,5)
"
shut(options%)
!
!q%=vumeter%
vuopen%=
%
tickmenu(open%,6)
"
shut(vumeter%)
"
!q%=waveform%
wopen%=
%
tickmenu(open%,7)
#
shut(waveform%)
#
shut(wavepane%)
!q%=cro%
cropen%=
%
tickmenu(open%,8)
shut(cro%)
4 :
"Wimp_SetCaretPosition",-1
5 :
"Wimp_SetCaretPosition",q%!0,-1
6 :
checkmouse
7 : f$=
lastbit(f$):
dragend
8 :
9 :
process_menu
17,18 :
message
playing%
. oldc=c:
"Tracker_ReadPos",,,,,lock%
c>0 donezero%=
donezero%
c<oldc
cding%
#
rand%
next_pl
nextcd
# c1=
geticondata(control%,9))
c<>c1
puticondata(control%,9,
"Tracker_TuneInfo",,,,,lock%
$ s1=
geticondata(tuneinfo%,7))
s<>s1
puticondata(tuneinfo%,7,
quit%
"Interface_CloseDown",,taskh%
"Sound_Speaker",oldspeak%:
"Sound_Enable",oldmute%
"Tracker_Stop",,,,,lock%:
"Tracker_Unlock",lock%
"Wimp_CloseDown":
leave gracefully
iconbar(v$)
$$icontext%="":$iconvalid%="S"+v$
q%!0=-1
q%!4=0
q%!8=0
q%!12=68
q%!16=68
+q%!20=%00010111000000000011000100101011
q%!24=icontext%
q%!28=iconvalid%
q%!32=1
"Wimp_CreateIcon",,q%
i% :
And draw the icon
message
yr%=q%!8
(q%!16)
0 : quit%=
Message_Quit ?
2 :
Message_DataSave ?
3 :
Message_DataLoad ?
5 :
Message_DataOpen ?
8 :
Message_PreQuit ?
&502 :
sendhelp:
Message_Help ?
checkmouse
handle=(q%!12)
icon=(q%!16)
(q%!12)
iconbar ?
(q%!8)
4 :
registered%=
pirate%=
"Wimp_CreateMenu",,register%,640,900
2 :
"Wimp_CreateMenu",,menu%,!q%-64,319
1 :
Adjust ?
saveas%
q%!8
4 :
q%!16
1 :
slabicon:f$=
geticondata(saveas%,0):
quicksave
3 : f$=
geticondata(saveas%,0):
dragbox(saveas%,2)
4 : com%=
com%:
toggleopts(com%,saveas%,4)
6 : ap%=
toggleopts(ap%,saveas%,6)
control%
q%!8
4 :
q%!16
0 :
puticonsprite(control%,0,"rev1"):sicn%=0:nscn%=
L
playing%
"Tracker_ReadPos",,,,,lock%
c,,m:c-=1:
c=-1 c=m
c=0 donezero%=
6
playing%
"Tracker_SetPos",c,,,,lock%
1 :
"Tracker_Pause",,,,,lock%
0
puticonsprite(control%,1,"pause1")
.
puticonsprite(control%,2,"stop")
.
puticonsprite(control%,3,"play")
2 :
dos%
*
"Tracker_Stop",,,,,lock%
1
puticonsprite(control%,1,"pause")
1
puticonsprite(control%,2,"stop1")
0
puticonsprite(control%,3,"play")
+
puticondata(control%,9,"0")
,
puticondata(control%,10,"0")
clear:playing%=
+ cding%=
:cdpos%=-1:cdmax%=-1
+
"Tracker_Pause",,,,,lock%
-
"Tracker_SetPos",0,,,,lock%
1
puticonsprite(control%,1,"pause")
1
puticonsprite(control%,2,"stop1")
0
puticonsprite(control%,3,"play")
+
puticondata(control%,9,"0")
donezero%=
3 :
"Tracker_Play",,,,,lock%
/
puticonsprite(control%,1,"pause")
.
puticonsprite(control%,2,"stop")
/
puticonsprite(control%,3,"play1")
4 :
puticonsprite(control%,4,"fwd1"):sicn%=4:nscn%=
K
playing%
"Tracker_ReadPos",,,,,lock%
c,,m:c+=1:
c>m c=0
6
playing%
"Tracker_SetPos",c,,,,lock%
12: speaker=
speaker
-
toggleopts(speaker,control%,12)
B
speaker
"Sound_Speaker",2
"Sound_Speaker",1
15: mute%=
mute%
+
toggleopts(mute%,control%,15)
>
mute%
"Sound_Enable",1
"Sound_Enable",2
19:
volume:dragvol%=
20,21,22,23,24,25,26,27 :
mutechan(q%!16-20)
29: speed%=
geticondata(control%,29))
#* speed%+=1:
speed%=6 speed%=0
$/
"Tracker_Speed",speed%,,,,lock%
%.
puticondata(control%,29,
speed%)
1 :
q%!16
0 :
puticonsprite(control%,0,"fwd1"):sicn%=0:nscn%=
)L
playing%
"Tracker_ReadPos",,,,,lock%
c,,m:c+=1:
c>m c=0
*6
playing%
"Tracker_SetPos",c,,,,lock%
4 :
puticonsprite(control%,4,"rev1"):sicn%=4:nscn%=
,M
playing%
"Tracker_ReadPos",,,,,lock%
c,,m:c-=1:
c=-1 c=m
-6
playing%
"Tracker_SetPos",c,,,,lock%
29: speed%=
geticondata(control%,29))
/+ speed%-=1:
speed%=-1 speed%=5
0/
"Tracker_Speed",speed%,,,,lock%
1.
puticondata(control%,29,
speed%)
stereo%
q%!8
4 :
q%!16
0 : channel(1)-=1:
channel(1)<1 channel(1)=1
8"
stereo(1,channel(1))
9E
puticonsprite(stereo%,1,"stereo"+
channel(1)):
slabicon
2 : channel(1)+=1:
channel(1)>7 channel(1)=7
;"
stereo(1,channel(1))
<E
puticonsprite(stereo%,1,"stereo"+
channel(1)):
slabicon
3 : channel(2)-=1:
channel(2)<1 channel(2)=1
>"
stereo(2,channel(2))
?E
puticonsprite(stereo%,4,"stereo"+
channel(2)):
slabicon
5 : channel(2)+=1:
channel(2)>7 channel(2)=7
A"
stereo(2,channel(2))
BE
puticonsprite(stereo%,4,"stereo"+
channel(2)):
slabicon
6 : channel(3)-=1:
channel(3)<1 channel(3)=1
D"
stereo(3,channel(3))
EE
puticonsprite(stereo%,7,"stereo"+
channel(3)):
slabicon
8 : channel(3)+=1:
channel(3)>7 channel(3)=7
G"
stereo(3,channel(3))
HE
puticonsprite(stereo%,7,"stereo"+
channel(3)):
slabicon
9 : channel(4)-=1:
channel(4)<1 channel(4)=1
J"
stereo(4,channel(4))
KF
puticonsprite(stereo%,10,"stereo"+
channel(4)):
slabicon
11: channel(4)+=1:
channel(4)>7 channel(4)=7
M"
stereo(4,channel(4))
NF
puticonsprite(stereo%,10,"stereo"+
channel(4)):
slabicon
20: channel(5)-=1:
channel(5)<1 channel(5)=1
P"
stereo(5,channel(5))
QF
puticonsprite(stereo%,21,"stereo"+
channel(5)):
slabicon
22: channel(5)+=1:
channel(5)>7 channel(5)=7
S"
stereo(5,channel(5))
TF
puticonsprite(stereo%,21,"stereo"+
channel(5)):
slabicon
23: channel(6)-=1:
channel(6)<1 channel(6)=1
V"
stereo(6,channel(6))
WF
puticonsprite(stereo%,24,"stereo"+
channel(6)):
slabicon
25: channel(6)+=1:
channel(6)>7 channel(6)=7
Y"
stereo(6,channel(6))
ZF
puticonsprite(stereo%,24,"stereo"+
channel(6)):
slabicon
26: channel(7)-=1:
channel(7)<1 channel(7)=1
\"
stereo(7,channel(7))
]F
puticonsprite(stereo%,27,"stereo"+
channel(7)):
slabicon
28: channel(7)+=1:
channel(7)>7 channel(7)=7
_"
stereo(7,channel(7))
`F
puticonsprite(stereo%,27,"stereo"+
channel(7)):
slabicon
29: channel(8)-=1:
channel(8)<1 channel(8)=1
b"
stereo(8,channel(8))
cF
puticonsprite(stereo%,30,"stereo"+
channel(8)):
slabicon
31: channel(8)+=1:
channel(8)>7 channel(8)=7
e"
stereo(8,channel(8))
fF
puticonsprite(stereo%,30,"stereo"+
channel(8)):
slabicon
buffer%
q%!8
4 :
q%!16
5 :
slabicon:
buffer(
geticondata(buffer%,3)))
register%
q%!8
4 :
q%!16
9 :
slabicon:
register_copy
options%
q%!8
4 :
q%!16
2 : lap%=
lap%:
toggleopts(lap%,options%,2)
4 : scr%=
scr%:
toggleopts(scr%,options%,4)
6 : dos%=
dos%:
toggleopts(dos%,options%,6)
8 : afs%=
afs%:
toggleopts(afs%,options%,8)
11: mak%=
mak%:
toggleopts(mak%,options%,11)
10:
slabicon:
save_opts
waveform%
q%!8
4 :
q%!16
2 :
slabicon:
playnote
cro%:
q%!8
4 : track%+=1:
track%=9 track%=1
> pointer%!0=cro%:
"Wimp_GetWindowInfo",,pointer%
# $(pointer%!76)=
track%
/
"Wimp_GetWindowState",,pointer%
,
"Wimp_CloseWindow",,pointer%
+
"Wimp_OpenWindow",,pointer%
1 : track%-=1:
track%=0 track%=8
> pointer%!0=cro%:
"Wimp_GetWindowInfo",,pointer%
# $(pointer%!76)=
track%
/
"Wimp_GetWindowState",,pointer%
,
"Wimp_CloseWindow",,pointer%
+
"Wimp_OpenWindow",,pointer%
Setup menus and menu block
P%=menu%
flags=&7000021
menu_header("PlayTrack",9)
menu_item(&00,infowind%,flags,"Info")
registered%
menu_item(&00,open%,flags,"Open")
menu_item(&00,open%,&2000021,"Open")
registered%
menu_item(&00,saveas%,flags,"Save F3")
menu_item(&00,saveas%,&2000021,"Save F3")
menu_item(&00,-1,flags,"Stop F6")
menu_item(&80,-1,flags,"Quit")
P%=open%
menu_header("Open",14)
menu_item(&00,-1,flags,"Control
menu_item(&00,-1,flags,"Info
menu_item(&00,-1,flags,"Stereo
menu_item(&00,-1,flags,"Samples
menu_item(&00,-1,flags,"Buffer
menu_item(&00,-1,flags,"Options
menu_item(&00,-1,flags,"Vu-Meter
menu_item(&00,-1,flags,"Waveform
menu_item(&00,-1,flags,"CRO
menu_item(&80,-1,flags,"Monitor
F10")
registered%=
I%=0
greymenu(open%,I%):
disable(saveas%,1):
disable(saveas%,3)
menu_header(T$,w)
$P%=T$
P%!12=&70207
P%!16=w*16
P%!20=40
P%!24=0
P%+=28
menu_item(A%,B%,C%,T$)
P%!0=A%
P%!4=B%
P%!8=C%
(T$)<13
$(P%+12)=T$
$(indtext%+indptr%)=T$
P%!12=indtext%+indptr%
P%!16=-1
P%!20=
(T$)+1
P%!8=P%!8
1<<8
indptr%+=
(T$)+1
P%+=24
error(e$,b%):!q%=0:$(q%+4)=e$+
"Wimp_ReportError",q%,b%,"PlayTrack"
f$,T%
250," "):f$="":T%=q%+44
?T%<>0:f$+=
?T%:T%+=1:
q%!40
&CB6,&001,&CC5,&701 :
q%!20=-2 cding%=
:cdpos%=-1:cdmax%=-1:
tracker_loadit(f$)
&2000 :
q%!20=-2
lastbit(f$)="!Music"
loadcd(f$)
&FFF :
q%!20=-2
loadpl(f$)
:
hold_it(odd%)
2q%!12=q%!8:q%!16=4:
"Wimp_SendMessage",17,q%
f$,T%
250," "):f$="":f$=
rtoz(q%+44)
q%!40
&CB6,&001,&CC5,&701 : cding%=
:cdpos%=-1:cdmax%=-1:
tracker_loadit(f$)
:
2q%!12=q%!8:q%!16=4:
"Wimp_SendMessage",17,q%
redraw
"Wimp_RedrawWindow",,q%
flag
x%=q%!4-q%!20:y%=q%!16-q%!24
flag<>0
!q%=vumeter%
playing%
"Tracker_SoundInfo",pointer%,,,,lock%
!vu_x%=x%:!vu_y%=y%-280
code%
!q%=wavepane%
show%
geticondata(waveform%,1)<>""
playing%
"Hourglass_On"
I samp%=
geticondata(waveform%,1)):
samp%=0
"Hourglass_Smash":
"Tracker_ReadSampleTable",samp%,,,,lock%
,,len1%,len%,rpt%,rptlen%,addr%
"Wimp_SetColour",7
len1%>0
addr%>0
A scale%=len%/len1%:rpt%=rpt%/scale%:rptlen%=rptlen%/scale%
) sx=0:sy%=0:dist=2112/len1%:mid%=0
x%,y%-256
I%=0
len1%
' sx+=dist:sy%=addr%?I%:mid%+=sy%
x%+sx,(y%-256)+sy%
mid%=mid%/len1%
"Wimp_SetColour",11
2
x%,(y%-256)+mid%:
x%+2112,(y%-256)+mid%
"Wimp_SetColour",10
1
x%+rpt%*dist,(y%-256):
x%+rpt%*dist,y%
"Wimp_SetColour",13
E
x%+(rpt%+rptlen%)*dist,(y%-256):
x%+(rpt%+rptlen%)*dist,y%
"Hourglass_Off"
!q%=cro%
"Wimp_SetColour",14
I%=0
150
x%+I%,(y%-200):
x%+I%,y%:
I%=0
200
x%,(y%-I%):
x%+150,(y%-I%):
playing%
"Wimp_SetColour",0
V
"Tracker_SoundInfo",pointer%,,,,lock%:boff%=(pointer%!((track%-1)*32)>>>16)
- samp%=(pointer%!(((track%-1)*32)+16))
samp%>0
e
"Tracker_ReadSampleTable",samp%,,,,lock%
,,,len%,,,addr%:
boff%>len%-15 boff%=len%-15
&
boff%<len%+15 bof%=len%+15
x%,(y%-200)+addr%?(boff%-1):sx%=0:sy=0:
I%=boff%-15
boff%+15:sy=(addr%?I%)/1.28:
x%+sx%,(y%-200)+sy:sx%+=(150/30):
)
x%,(y%-100):
x%+150,(y%-100)
!q%<>vumeter%
"Interface_Render3dWindow",,q%
"Wimp_GetRectangle",,q%
flag
assemble:
redraw code in assembler for speed:
pass%=8
P%=code%:L%=code%+700
[OPT pass%
LDR R0,vu_block%
$!LDR R1,[R0,#24]:STR R1,chan1%
%$LDR R1,[R0,#32+24]:STR R1,chan2%
&$LDR R1,[R0,#64+24]:STR R1,chan3%
'$LDR R1,[R0,#96+24]:STR R1,chan4%
(%LDR R1,[R0,#128+24]:STR R1,chan5%
)%LDR R1,[R0,#160+24]:STR R1,chan6%
*%LDR R1,[R0,#192+24]:STR R1,chan7%
+%LDR R1,[R0,#224+24]:STR R1,chan8%
MOV R0,#11
SWI "Wimp_SetColour"
LDR R2,vu_y%
LDR R1,vu_x%:MOV R0,#4
SWI "OS_Plot"
1:MOV R1,#30:LDR R3,chan1%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
4(LDR R1,vu_x%:ADD R1,R1,#40:MOV R0,#4
SWI "OS_Plot"
6:MOV R1,#30:LDR R3,chan2%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
9(LDR R1,vu_x%:ADD R1,R1,#80:MOV R0,#4
SWI "OS_Plot"
;:MOV R1,#30:LDR R3,chan3%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
>)LDR R1,vu_x%:ADD R1,R1,#120:MOV R0,#4
SWI "OS_Plot"
@:MOV R1,#30:LDR R3,chan4%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
C)LDR R1,vu_x%:ADD R1,R1,#160:MOV R0,#4
SWI "OS_Plot"
E:MOV R1,#30:LDR R3,chan5%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
H)LDR R1,vu_x%:ADD R1,R1,#200:MOV R0,#4
SWI "OS_Plot"
J:MOV R1,#30:LDR R3,chan6%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
M)LDR R1,vu_x%:ADD R1,R1,#240:MOV R0,#4
SWI "OS_Plot"
O:MOV R1,#30:LDR R3,chan7%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
LDR R2,vu_y%
R)LDR R1,vu_x%:ADD R1,R1,#280:MOV R0,#4
SWI "OS_Plot"
T:MOV R1,#30:LDR R3,chan8%:MOV R2,R3,LSL #3:SUB R2,R2,R3
MOV R0,#97:SWI "OS_Plot"
MOV PC,R14
WB.vu_block% EQUD 0:.chan1% EQUD 0:.chan2% EQUD 0:.chan3% EQUD 0
X?.chan4% EQUD 0:.chan5% EQUD 0:.chan6% EQUD 0:.chan7% EQUD 0
Y..chan8% EQUD 0:.vu_x% EQUD 0:.vu_y% EQUD 0
pass%
process_menu
"Wimp_GetPointerInfo",,pointer%:j%=(pointer%!8=1)
handle
q%!0
1 :
q%!4
d5
0 : copen%=
copen%:
tickmenu(open%,0)
e@
copen%
openup(control%,0,1024,625,360)
f1
copen%
shut(control%)
g5
1 : topen%=
topen%:
tickmenu(open%,1)
hB
topen%
openup(tuneinfo%,580,530,700,430)
i2
topen%
shut(tuneinfo%)
j5
2 : sopen%=
sopen%:
tickmenu(open%,2)
k@
sopen%
window_centre(stereo%,1110,250)
l0
sopen%
shut(stereo%)
m5
3 : vopen%=
vopen%:
tickmenu(open%,3)
nB
vopen%
openback(samples%,0,1000,700,850)
o1
vopen%
shut(samples%)
p5
4 : bopen%=
bopen%:
tickmenu(open%,4)
q?
bopen%
window_centre(buffer%,700,475)
r0
bopen%
shut(buffer%)
s5
5 : oopen%=
oopen%:
tickmenu(open%,5)
t@
oopen%
window_centre(options%,768,367)
u1
oopen%
shut(options%)
v7
6 : vuopen%=
vuopen%:
tickmenu(open%,6)
wB
vuopen%
openup(vumeter%,970,900,310,280)
x2
vuopen%
shut(vumeter%)
y5
7 : wopen%=
wopen%:
tickmenu(open%,7)
zR
wopen%
openlinked(waveform%,wavepane%,1280,390,2112,256)
{C
wopen%
shut(waveform%):
shut(wavepane%)
|8
8 : cropen%=
cropen%:
tickmenu(open%,8)
}>
cropen%
openup(cro%,700,500,150,200)
~.
cropen%
shut(cro%)
9 :
monitor
3 :
dos%
*
"Tracker_Stop",,,,,lock%
1
puticonsprite(control%,1,"pause")
1
puticonsprite(control%,2,"stop1")
0
puticonsprite(control%,3,"play")
+
puticondata(control%,9,"0")
,
puticondata(control%,10,"0")
clear:playing%=
+ cding%=
:cdpos%=-1:cdmax%=-1
+
"Tracker_Pause",,,,,lock%
-
"Tracker_SetPos",0,,,,lock%
1
puticonsprite(control%,1,"pause")
1
puticonsprite(control%,2,"stop1")
0
puticonsprite(control%,3,"play")
+
puticondata(control%,9,"0")
donezero%=
4 :
edited%=
D
ok("File(s) edited but not saved. Really quit ?")
quit%=
quit%=
edited%=
quit%=
"Wimp_CreateMenu",,menu%,pointer%!0,pointer%!4
openup(handle,x,y,w,h)
pointer%!0=handle
pointer%!4=x:pointer%!8=y-h
!pointer%!12=x+w:pointer%!16=y
pointer%!20=0:pointer%!24=0
pointer%!28=-1
"Wimp_OpenWindow",,pointer%
openback(handle,x,y,w,h)
pointer%!0=handle
pointer%!4=x:pointer%!8=y-h
!pointer%!12=x+w:pointer%!16=y
pointer%!20=0:pointer%!24=0
pointer%!28=-2
"Wimp_OpenWindow",,pointer%
slabicon
"Interface_SlabButton",,q%:
Slab in...
q%!8=0
"Interface_SlabButton",,q%:
...and out
shut(h%)
1pointer%!0=h%:
"Wimp_CloseWindow",,pointer%
sendhelp
%q%!12=q%!8:q%!16=&503:help%=q%+20
:help%=
help(q%!32,q%!36,q%!20,q%!24,help%):
help%=0
+?help%=0:
No, so send application help
*!q%=(help%+4-q%)
Setup help block
"Wimp_SendMessage",17,q%,q%!4:
and send it
help(window%,icon%,x%,y%,to%)
$to%=""
window%
-2 :
iconbar ?
icon%
icon% :
my icon ?
P $to%="This is the PlayTrack icon.|MDrag Tracker tunes to it to play them."
infowind% :
info window ?
icon%
-1,0,1,2,3,4,5,6,7,8 :
not over 'Click here...' icon ?
L $to%="This is the Info window.|MIt provides information on PlayTrack."
"Interface_SendHelp",,q%:=0:
Send Interface help
saveas% :
'Save as:' window ?
icon%
-1 :
over work area ?
C $to%="This is the 'Save' window.|MIt is used to save a file."
"Interface_SendHelp",,q%:=0:
Send Interface help
=to%+
($to%)
geticondata(window%,icon%)
pointer%!0=window%
pointer%!4=icon%
"Wimp_GetIconState",,pointer%
=$(pointer%!28)
puticondata(window%,icon%,t$)
'pointer%!0=window%:pointer%!4=icon%
"Wimp_GetIconState",,pointer%
$(pointer%!28)=t$
pointer%!12=0:pointer%!8=0
"Wimp_SetIconState",,pointer%
puticonsprite(window%,icon%,t$)
'pointer%!0=window%:pointer%!4=icon%
"Wimp_GetIconState",,pointer%
"Wimp_DeleteIcon",,pointer%
(pointer%!4=window%:$(pointer%+28)=t$
.pointer%+=4:
"Wimp_CreateIcon",,pointer%
"Wimp_ForceRedraw",pointer%!0,pointer%!4,pointer%!8,pointer%!12,pointer%!16
pointer%-=4
tellemoff(e$)
er%=pointer%
!er%=0
$(er%+4)=e$+
"Wimp_ReportError",er%,1,"PlayTrack"
rtoz(T%):
?T%<>0:q$+=
?T%:T%+=1:
edited%
ok("File(s) edited but not saved. Really quit ?"):
no_quit
ok(e$)
er%=pointer%
!er%=0
$(er%+4)=e$+
"Wimp_ReportError",er%,&17,"Message from !PlayTrack"
=(b%=1)
no_quit
9q%!12=q%!8:q%!16=8:
"Wimp_SendMessage",17,q%,q%!4:
dragend
dragstop%<>-1
dragstop%
d%=pointer%
"Wimp_GetPointerInfo",,d%
+d%!32=d%!4 :tt%=d%!32
+d%!28=!d% :te%=d%!28
+d%!24=d%!16 :tf%=d%!24
+d%!20=d%!12 :tw%=d%!20
%d%!16=1 :d%!12=0 :d%!36=0
)d%!40=0 :!d%=64 :$(d%+44)=f$
"Wimp_SendMessage",17,d%,d%!20,d%!24
mr%=d%!8
lastbit(s$)
s$,":")>0
s$,":")+1)
s$,".")>0
s$,".")+1)
puticondata(saveas%,0,
rtoz(q%+44))
rtoz(q%+44)
sd(&FFA)
dragbox(w%,i%)
d%=pointer%
!d%=w%
"Wimp_GetWindowState",,d%
0"ys%=d%!16-d%!8:x%=d%!4:y%=d%!8
d%!4=i%
"Wimp_GetIconState",,d%
lastbit(f$)
d%!8+=x%
d%!12+=y%+ys%
d%!16+=x%
d%!20+=y%+ys%
d%!24=0
d%!28=0
"OS_ReadModeVariable",
,,h%:h%=
extracth(h%)
"OS_ReadModeVariable",
,,v%:v%=
extractv(v%)
d%!32=(h%*2)
d%!36=(v%*4)
> !d%=0
d%!4=5
dragstart%=-1
"Wimp_DragBox",,d%
dragstart%,%11000101,1,"file_ffa",d%+8,d%+24
quicksave
f$,":")<1
f$,".")<1
tellemoff("To save, drag icon to a directory viewer")
sd(&FFA)
sd(t%)
save_rm(f$)
d%=pointer%
!d%=64
d%!20=tw%
d%!24=tf%
d%!28=te%
d%!32=tt%
d%!12=yr%
d%!16=3
d%!36=0
d%!40=t%
$(d%+44)=f$
"Wimp_SendMessage",17,d%,d%!20
"OS_File",18,f$,t%
"Wimp_CreateMenu",,-1
extracth(a%)
0 : =1280
1 : =640
2 : =320
3 : =160
extractv(a%)
1 : =512
2 : =256
toggleopts(flag,w%,i%):win%=w%:icn%=i%
puticonsprite(w%,i%,"selclick")
flag
: newicn%=
:type=flag
: newicn%=
:type=flag
toggleradio(flag,w%,i%,i2%)
flag
puticonsprite(w%,i%,"radon")
z1
puticonsprite(w%,i2%,"radoff")
puticonsprite(w%,i%,"radoff")
|0
puticonsprite(w%,i2%,"radon")
hackflags(w%,i%,eor%,or%)
pointer%!0=w%:pointer%!4=i%
#pointer%!8=eor%:pointer%!12=or%
"Wimp_SetIconState",,pointer%
enable(w%,i%)
hackflags(w%,i%,0,&400000)
disable(w%,i%)
hackflags(w%,i%,&400000,&400000)
select(w%,i%)
hackflags(w%,i%,&200000,&200000)
deselect(w%,i%)
hackflags(w%,i%,0,&200000)
toedit(file$)
!pointer%=(48+
file$)
pointer%!12=0
pointer%!16=5
pointer%!36=-2
pointer%!40=&FFF
$(pointer%+44)=file$+
"Wimp_SendMessage",18,pointer%,0
tocursor(text$)
key%=1
(text$)
"Wimp_ProcessKey",
text$,key%,1))
"Wimp_Poll",,q%
reason%
"Interface_PreProcessKey",reason%,q%,taskh%
"Interface_Poll",reason%,,taskh%
reason%
1 :
redraw
2 :
"Wimp_OpenWindow",,q%
3 :
"Wimp_CloseWindow",,q%
6 :
checkmouse
7 : f$=
lastbit(f$):
dragend
9 :
process_menu
17,18 :
message
tickmenu(b%,n%)
%b%!(28+24*n%)=b%!(28+24*n%)
greymenu(b%,n%)
1b%!((28+24*n%)+8)=b%!((28+24*n%)+8)
&400000
window_centre(handle%,w%,h%)
x%=((1280-w%)/2)
y%=(((1024-h%)/2)+h%)
openup(handle%,x%,y%,w%,h%)
force_redraw
"Wimp_ForceRedraw",fontselect%,0,0-400,700,0
tracker_loadit(f$):tune$=f$
"Tracker_Stop",,,,,lock%:
Release so next call won't corrupt
workspc%>0
"OS_Heap",3,buff%,workspc%
(f$):len%=
"XOS_Heap",2,buff%,,len%
,,workspc%;flags%
(flags%
1)=1
tellemoff("Buffer size is inadequate: Please extend"):
"OS_File",&FF,f$,workspc%
"Tracker_MemoryLoad",workspc%,len%,,,lock%
lap%
"Tracker_Play",,,,,lock%
puticonsprite(control%,0,"rev")
puticonsprite(control%,1,"pause")
lap%
puticonsprite(control%,2,"stop")
puticonsprite(control%,2,"stop1")
lap%
puticonsprite(control%,3,"play1")
puticonsprite(control%,3,"play")
puticonsprite(control%,4,"fwd")
"Tracker_ReadPos",,,,,lock%
current,,max
puticondata(control%,10,
puticondata(tuneinfo%,1,f$)
(f$):len%=
puticondata(tuneinfo%,3,
len%+" bytes -- "+
int((len%/1024)+0.4))+"K"):lenbytes%=len%
"Tracker_TuneInfo",,,,,lock%
len1%,voices%,speed%,name$,a%
a%>0 author$=
rtoz(a%)
author$=""
name$=
strip(name$)
puticondata(tuneinfo%,5,
voices%)
puticondata(tuneinfo%,7,
speed%)
puticondata(tuneinfo%,9,
len1%)
puticondata(tuneinfo%,11,name$)
puticondata(tuneinfo%,13,author$)
puticondata(tuneinfo%,15,
fmat(f$))
puticondata(control%,14,name$)
"OS_File",5,f$
,,load%:type%=(load%>>>8)
&FFF:
type%
&001 :
puticondata(tuneinfo%,17,"STracker")
&CB6 :
puticondata(tuneinfo%,17,"STModule")
&CC5 :
puticondata(tuneinfo%,17,"TeqMusic")
&701 :
puticondata(tuneinfo%,17,"ProTrack")
afs%
"OS_File",18,f$,&CB6
samples_draw
redo_buff(lenbytes%)
playing%=
redo_buff(len%)
buffersize%>0
puticondata(buffer%,10,
len%+" bytes -- "+
int(len%/1024))+"K")
"OS_Heap",1,buff%
,,,free%
puticondata(buffer%,11,
(free%)+" bytes -- "+
int(free%/1024))+"K")
puticondata(buffer%,10,"No buffer defined")
puticondata(buffer%,11,"No buffer defined")
clear
puticondata(tuneinfo%,1,"No Tune Loaded")
puticondata(tuneinfo%,3,"No Tune Loaded")
puticondata(tuneinfo%,5,"0")
puticondata(tuneinfo%,7,"0")
puticondata(tuneinfo%,9,"0")
puticondata(tuneinfo%,11,"No Tune Loaded")
puticondata(tuneinfo%,13,"No Tune Loaded")
puticondata(tuneinfo%,15,"0")
puticondata(tuneinfo%,17,"No Tune Loaded")
puticondata(control%,14,"")
strip(text$)
text$,1))<33:text$=
text$,(
text$)-1):
text$,1))<33:text$=
text$,(
text$)-1):
=text$
fmat(f$)
mak%
mandk(f$)
xbyte(f$)
xbyte(f$)
#h%=471
a=&78 ="15"
="31"
mandk(f$)
#h%=1080
"q$="":
I%=1
4:q$+=
#h%):
q$="M.K."
q$="FLT4"
q$="FLT8" ="31"
="15"
Check for Startrekker as well as ProTracker ID
stereo(ch,pos)
"Sound_Stereo",ch,
pos(pos)
pos(pos)
pos
1 : =-127
2 : =-79
3 : =-47
4 : =0
5 : =47
6 : =79
7 : =127
create(ww,wh,tf,tb,sc,T$,wf,wb,flags)
/$pointer%!24=-1:pointer%!28=flags
0!pointer%?32=tf:pointer%?33=tb
1!pointer%?34=wf:pointer%?35=wb
pointer%?36=3:pointer%?37=1
3 pointer%?38=sc:pointer%?39=0
4 pointer%!40=0:pointer%!44=wh
5 pointer%!48=ww:pointer%!52=0
6!pointer%!56=&3D:pointer%!60=0
pointer%!64=0:pointer%!68=0
$(pointer%+72)=T$
pointer%!84=0
"Wimp_CreateWindow",,pointer%
create_icon(handle,addr,minx,maxx,miny,ht,t$,flags,len)
>%pointer%!0=handle:pointer%!4=minx
?$pointer%!8=miny:pointer%!12=maxx
@)pointer%!16=miny+ht:pointer%!20=flags
addr=0
$(pointer%+24)=t$
pointer%!24=addr
t$="
" pointer%!28=valid%
pointer%!28=-1
pointer%!32=len
"Wimp_CreateIcon",,pointer%
samps_wind
start%=samps%
volstart%=volume%
sampstart%=samplen%
O9samples%=
create(700,-1200,7,2,12,"Samples",7,1,%111)
miny=-60
create_icon(samples%,text%,10,80,miny,52,"
",&17000121,0)
create_icon(samples%,text%+8,90,200,miny,52,"
",&17000121,0)
create_icon(samples%,text%+16,500,590,miny,52,"
",&17000121,0)
create_icon(samples%,text%+24,600,690,miny,52,"
",&17000121,0)
miny-=60
count%=1
I=1
$samps%=""
$volume%=""
$samplen%=""
create_icon(samples%,0,10,80,miny,36,
I,&7000021,0)
create_icon(samples%,samps%,90,490,miny,36,"",&7016121,32)
create_icon(samples%,volume%,500,590,miny,36,"",&7000121,32)
create_icon(samples%,samplen%,600,690,miny,36,"",&7000121,32)
_8miny-=36:samps%+=32:volume%+=4:samplen%+=6:count%+=1
samps%=start%
volume%=volstart%
samplen%=sampstart%
samples_draw
sampsnum=0
start%=samps%
volstart%=volume%
sampstart%=samplen%
I=1
"Tracker_ReadSampleTable",I,,,,lock%
no%,a$,vol%,len%
puticontext(samples%,(2*I)+3,samps%,a$)
vol%<>0
puticontext(samples%,(2*I)+4,volume%,
vol%)
puticontext(samples%,(2*I)+4,volume%,"")
len%<>0
puticontext(samples%,(2*I)+5,samplen%,
len%)
puticontext(samples%,(2*I)+5,samplen%,""):sampsnum+=1
p%samps%+=32:volume%+=4:samplen%+=6
samps%=start%
volume%=volstart%
samplen%=sampstart%
puticontext(window%,icon%,buffer%,text$)
$buffer%=text$
y'pointer%!0=window%:pointer%!4=icon%
pointer%!8=0:pointer%!12=0
"Wimp_SetIconState",,pointer%
"Wimp_ProcessKey",q%!24
q%!0
buffer%
q%!4
q%!24
13 : q%!8=4:q%!12=buffer%:q%!16=5:
slabicon
4
buffer(
geticondata(buffer%,3)))
waveform%
q%!4
q%!24
13 : show%=
"Wimp_ForceRedraw",wavepane%,0,-256,2112,0
q%!24
385 : speaker=
speaker:
toggleopts(speaker,control%,12)
E
speaker
"Sound_Speaker",2
"Sound_Speaker",1
386 : mute%=
mute%:
toggleopts(mute%,control%,15)
A
mute%
"Sound_Enable",1
"Sound_Enable",2
387 :
register%
4
"Wimp_GetPointerInfo",,pointer%
K
"Wimp_CreateMenu",,saveas%,pointer%!0-64,pointer%!4+64
388 :
puticonsprite(control%,0,"rev1"):sicn%=0:nscn%=
D
"Tracker_ReadPos",,,,,lock%
c,,m:c-=1:
c<0 c=m
!
c=0 donezero%=
.
"Tracker_SetPos",c,,,,lock%
389 :
"Tracker_Pause",,,,,lock%
3
puticonsprite(control%,1,"pause1")
1
puticonsprite(control%,2,"stop")
1
puticonsprite(control%,3,"play")
390 :
dos%
-
"Tracker_Stop",,,,,lock%
4
puticonsprite(control%,1,"pause")
4
puticonsprite(control%,2,"stop1")
3
puticonsprite(control%,3,"play")
.
puticondata(control%,9,"0")
/
puticondata(control%,10,"0")
#
clear:playing%=
. cding%=
:cdpos%=-1:cdmax%=-1
.
"Tracker_Pause",,,,,lock%
0
"Tracker_SetPos",0,,,,lock%
4
puticonsprite(control%,1,"pause")
4
puticonsprite(control%,2,"stop1")
3
puticonsprite(control%,3,"play")
donezero%=
391 :
"Tracker_Play",,,,,lock%
2
puticonsprite(control%,1,"pause")
1
puticonsprite(control%,2,"stop")
2
puticonsprite(control%,3,"play1")
392 :
puticonsprite(control%,4,"fwd1"):sicn%=4:nscn%=
D
"Tracker_ReadPos",,,,,lock%
c,,m:c+=1:
c>m c=0
.
"Tracker_SetPos",c,,,,lock%
401 :
registered%
3 copen%=
copen%:
tickmenu(open%,0)
;
copen%
openup(control%,0,1024,625,360)
,
copen%
shut(control%)
402 :
registered%
3 topen%=
topen%:
tickmenu(open%,1)
=
topen%
openup(tuneinfo%,580,530,700,430)
-
topen%
shut(tuneinfo%)
403 :
registered%
3 sopen%=
sopen%:
tickmenu(open%,2)
;
sopen%
window_centre(stereo%,1110,250)
+
sopen%
shut(stereo%)
404 :
registered%
3 vopen%=
vopen%:
tickmenu(open%,3)
=
vopen%
openback(samples%,0,1000,700,850)
,
vopen%
shut(samples%)
405 :
registered%
3 bopen%=
bopen%:
tickmenu(open%,4)
:
bopen%
window_centre(buffer%,700,475)
+
bopen%
shut(buffer%)
406 :
registered%
3 oopen%=
oopen%:
tickmenu(open%,5)
;
oopen%
window_centre(options%,768,367)
,
oopen%
shut(options%)
407 :
registered%
5 vuopen%=
vuopen%:
tickmenu(open%,6)
=
vuopen%
openup(vumeter%,970,900,310,280)
-
vuopen%
shut(vumeter%)
408 :
registered%
3 wopen%=
wopen%:
tickmenu(open%,7)
M
wopen%
openlinked(waveform%,wavepane%,1280,390,2112,256)
>
wopen%
shut(waveform%):
shut(wavepane%)
409 :
registered%
5 cropen%=
cropen%:
tickmenu(open%,8)
9
cropen%
openup(cro%,700,500,150,200)
)
cropen%
shut(cro%)
474 :
registered%
monitor
393 : cvol%-=5:
cvol%<0 cvol%=0
& x%=
int(cvol%/volunit)
1 pointer%!0=control%:pointer%!4=18
0
"Wimp_GetIconState",,pointer%
.
"Wimp_DeleteIcon",,pointer%
) pointer%!16=pointer%!8+x%
D pointer%!4=control%:
"Wimp_CreateIcon",,pointer%+4
> pointer%!4=19:
"Wimp_GetIconState",,pointer%
_
"Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
458 : cvol%+=5:
cvol%>255 cvol%=255
& x%=
int(cvol%/volunit)
1 pointer%!0=control%:pointer%!4=18
0
"Wimp_GetIconState",,pointer%
.
"Wimp_DeleteIcon",,pointer%
) pointer%!16=pointer%!8+x%
D pointer%!4=control%:
"Wimp_CreateIcon",,pointer%+4
> pointer%!4=19:
"Wimp_GetIconState",,pointer%
_
"Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
459 : cvol%=255
& x%=
int(cvol%/volunit)
1 pointer%!0=control%:pointer%!4=18
0
"Wimp_GetIconState",,pointer%
.
"Wimp_DeleteIcon",,pointer%
) pointer%!16=pointer%!8+x%
D pointer%!4=control%:
"Wimp_CreateIcon",,pointer%+4
> pointer%!4=19:
"Wimp_GetIconState",,pointer%
_
"Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
.
"Tracker_SetPos",0,,,,lock%
+
"Tracker_Play",,,,,lock%
2
puticonsprite(control%,1,"pause")
1
puticonsprite(control%,2,"stop")
2
puticonsprite(control%,3,"play1")
8
"Sound_Speaker",1:
"Sound_Enable",2
! speaker=
:mute%=
4
puticonsprite(control%,12,"seloff")
4
puticonsprite(control%,15,"seloff")
474 :
registered%
+ pointer%!0=1:pointer%!4=9
9
"Wimp_SendMessage",9,pointer%,taskh%
buffer(size%)
playing%
tellemoff("Can't alter buffer while playing"):
buff%>0
release_rma(buff%)
("RMAFree "+
(size%)+" Error 0 Insufficent RMA")
"buffersize%=(size%*1024)
!buff%=
claim_rma(buffersize%)
"OS_Heap",0,buff%,,buffersize%
redo_buff(lenbytes%)
hold_it(window%)
finish%
window%
odd% :
window_centre(odd%,750,300)
help%:
window_centre(help%,800,400)
%;pointer%!0=window%:
"Wimp_GetWindowOutline",,pointer%
&Cxmin%=pointer%!4:ymin%=pointer%!8:xsize%=pointer%!12-pointer%!4
'Aysize%=pointer%!16-pointer%!8:
xmin%,ymin%,xsize%,ysize%
finish%=
"Wimp_Poll",,pointer%
1 :
redraw2
2 :
"Wimp_OpenWindow",,pointer%
3 :
"Wimp_CloseWindow",,pointer%
6 :
checkmouse2
17,18 :
pointer%!16=0
"Interface_CloseDown",taskh%:
"Sound_Speaker",oldspeak%:
"Sound_Enable",oldmute%:
"Tracker_Unlock",lock%:
tidy:
"Wimp_CloseDown":
1E
pointer%!16=&400C1
xmin%,ymin%,xsize%,ysize%
finish%
shut(window%)
"OS_ReadModeVariable",-1,4
,,Eig%
"OS_ReadModeVariable",-1,11
,,Extent%
xsize%=(Extent%+1)<<Eig%
"OS_ReadModeVariable",-1,5
,,Eig%
"OS_ReadModeVariable",-1,12
,,Extent%
ysize%=(Extent%+1)<<Eig%
0,0,xsize%,ysize%
checkmouse2
pointer%!12
odd%
pointer%!8
4 :
pointer%!16
6 :
slabicon2:
tracker_loadit(f$):finish%=
7 :
slabicon2:finish%=
8 :
slabicon2:
setup_help:
hold_it(help%):finish%=
help%
pointer%!8
4 :
pointer%!16
9 :
slabicon2:finish%=
setup_help
clear_help
puticondata(help%,3,"PlayTrack can only handle")
puticondata(help%,4,"certain types of file.")
puticondata(help%,5,"However, it may be able to")
puticondata(help%,6,"load music files in formats")
puticondata(help%,7,"it doesn't 'know' about,")
puticondata(help%,8,"so you can still hear them.")
setup_mess1
clear_help
puticondata(help%,3,"This is an unregistered")
puticondata(help%,4,"copy of !PlayTrack, that is")
puticondata(help%,5,"restricted in what it can do.")
puticondata(help%,6,"If you want to use the more")
puticondata(help%,7,"advanced facilities, then")
puticondata(help%,8,"you can register.")
setup_mess2
clear_help
puticondata(help%,3,"This copy of !PlayTrack is")
puticondata(help%,4,"now registered to this")
puticondata(help%,5,"machine. Please quit")
puticondata(help%,6,"!PlayTrack and reload to")
puticondata(help%,7,"use the more advanced")
puticondata(help%,8,"facilities.")
setup_mess3
clear_help
puticondata(help%,3,"Only PIN numbers up to")
puticondata(help%,4,"#65280 are allowed.")
puticondata(help%,6,"Please re-enter your")
puticondata(help%,7,"PIN number.")
setup_mess4
clear_help
puticondata(help%,3,"This copy of !PlayTrack is")
puticondata(help%,4,"not registered to this")
puticondata(help%,5,"machine.")
puticondata(help%,7,"!PlayTrack will now run, but")
puticondata(help%,8,"will not work fully.")
clear_help:
I%=3
puticondata(help%,I%,""):
redraw2
"Wimp_RedrawWindow",,pointer%
more%
more%<>0
"Interface_Render3dWindow",,pointer%
"Wimp_GetRectangle",,pointer%
more%
slabicon2
"Interface_SlabButton",,pointer%
pointer%!8=0
"Interface_SlabButton",,pointer%
register(string$)
puticondata(infowind%,15,"Registered to: "+string$)
get_register
("<PlayTrack$Dir>.Register")
block%=
claim_rma(l%)
"OS_File",255,"<PlayTrack$Dir>.Register",block%
I%=0
l%:block%?I%=block%?I%
(I%),1)):
0pirate%=
:pin%=!block%:name$=
rtoz(block%+4)
pin%=65281
pin%=65282
pin%=65281
,
register(name$):registered%=
&
register(name$):registered%=
"OS_Byte",161,cmos%
,,reg%:
"OS_Byte",161,cmos2%
,,reg2%
reg%=(256*reg%)+reg2%
reg%<>pin%
setup_mess4:
hold_it(help%):registered%=
:pirate%=
register("PIRATE COPY"):
release_rma(block%):
register(name$):registered%=
release_rma(block%)
I=1
claim_rma(size%)
"XOS_Module",6,,,size%
,,addr%;flags%
(flags%
1)=1
tellemoff("Error during RMA claim")
=addr%
release_rma(addr%)
"OS_Module",7,,addr%
register_copy
#name$=
geticondata(register%,4)
&pin%=
geticondata(register%,10))
pin%>65280
setup_mess3:
hold_it(help%):
puticondata(register%,10,""):
len%=4+
name$+1
addr%=
claim_rma(len%)
\!addr%=pin%:block%=addr%+4:name$+=
I%=1
name$:?block%=
name$,I%,1)):block%+=1:
I%=0
len%:addr%?I%=addr%?I%
I%,1)):
"OS_File",10,"<PlayTrack$Dir>.Register",&FFD,,addr%,addr%+len%
"OS_Byte",162,cmos%,pin%
"OS_Byte",162,cmos2%,pin%
setup_mess2:
hold_it(help%)
save_opts
("<PlayTrack$Dir>.Options")
$clock$=
geticondata(options%,13)
#buffer$=
geticondata(buffer%,3)
#h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$
load_opts
("<PlayTrack$Dir>.Options")
#h%,lap%,scr%,dos%,afs%,mak%,clock$,buffer$
/lap$="":
lap% lap$="selon"
lap$="seloff"
/scr$="":
scr% scr$="selon"
scr$="seloff"
/dos$="":
dos% dos$="selon"
dos$="seloff"
/afs$="":
afs% afs$="selon"
afs$="seloff"
/mak$="":
mak% mak$="selon"
mak$="seloff"
puticonsprite(options%,2,lap$)
puticonsprite(options%,4,scr$)
puticonsprite(options%,6,dos$)
puticonsprite(options%,8,afs$)
puticonsprite(options%,11,mak$)
puticondata(options%,13,clock$)
puticondata(buffer%,3,buffer$)
openlinked(wh1%,wh2%,w1%,h1%,w2%,h2%)
x%=(1280-w1%)/2
y%=((1024-h1%)/2)+h1%
openup(wh1%,x%,y%,w1%,h1%)
openup(wh2%,x%+20,y%-80,w1%-40,h2%)
volume
"Wimp_GetPointerInfo",,pointer%:x%=pointer%!0
:pointer%!0=control%:
"Wimp_GetWindowState",,pointer%
Ax%-=pointer%!4:pointer%!4=19:
"Wimp_GetIconState",,pointer%
6x%-=pointer%!8:
x% now is distance along icon #19
x1=x%/580:
x1>1 x1=1
x1<0 x1=0
x1<>pc
' pointer%!0=control%:pointer%!4=18
"Wimp_GetIconState",,pointer%
"Wimp_DeleteIcon",,pointer%
9 pointer%!4=control%:pointer%!16=pointer%!8+(x1*580)
"Wimp_CreateIcon",,pointer%+4
H pointer%!0=control%:pointer%!4=19:
"Wimp_GetIconState",,pointer%
"Wimp_ForceRedraw",pointer%!0,pointer%!8,pointer%!12,pointer%!16,pointer%!20
pc=x%/580:
pc>1 pc=1
pc<0 pc=0
"Tracker_Volume",pc*127,,,,lock%
int(int)
int+=0.5
(int)
playnote
2samp%=
geticondata(waveform%,1)):
samp%=0
"Tracker_ReadSampleTable",samp%,,,,lock%
,,len%:
len%=0
"Tracker_PlayNote",1,15,samp%,200,lock%
save_rm(f$)
workspc%=0
tellemoff("You have to have a Tracker tune loaded first!"):
$base%=
claim_rma(lenbytes%+1000)
base%=0
tellemoff("Cannot save Tracker tune as Relocatable Module"):
pass%=12
)P%=0:O%=base%:L%=base%+lenbytes%+1500
[OPT pass%
EQUD 0
EQUD mod_initialise%
EQUD mod_finalise%
EQUD 0
EQUD mod_title%
EQUD mod_help%
com%
[OPT pass%
EQUD mod_command%
[OPT pass%
EQUD 0
[OPT pass%
EQUD 0
.mod_initialise%
STMFD R13!,{R0-R8,R14}
SWI "OS_ReadMonotonicTime"
R0,R0,#256
STR R0,mod_lock%
SWI "Tracker_Lock"
ADR R0,mod_tunestart%
LDR R1,mod_tunelength%
LDR R4,mod_lock%
SWI "Tracker_MemoryLoad"
LDR R0,mod_autoplay%
CMP R0,#1
SWIEQ "Tracker_Play"
LDMFD R13!,{R0-R8,PC}
.mod_finalise%
STMFD R13!,{R0-R8,R14}
LDR R4,mod_lock%
SWI "Tracker_Stop"
MOV R0,R4
SWI "Tracker_Unlock"
LDMFD R13!,{R0-R8,PC}
.mod_title%
EQUS "MusicModule"
EQUB 0
: ALIGN
.mod_help%
=0EQUS "MusicModule"+
9+"0.10 ("+
$,5,11)+")"
EQUB 0:ALIGN
.mod_command%
EQUS "MusicOn"
EQUB 0
C ALIGN
EQUD mod_musicon%
EQUD 0
EQUD mod_musicon_syntax%
EQUD mod_musicon_help%
EQUS "MusicOff"
EQUB 0
J ALIGN
EQUD mod_musicoff%
EQUD 0
EQUD mod_musicoff_syntax%
EQUD mod_musicoff_help%
EQUS "MusicPause"
EQUB 0
Q ALIGN
EQUD mod_musicpause%
EQUD 0
EQUD mod_musicpause_syntax%
EQUD mod_musicpause_help%
EQUD 0
.mod_musicon%
STMFD R13!,{R0-R8,R14}
LDR R4,mod_lock%
SWI "Tracker_Play"
LDMFD R13!,{R0-R8,PC}
.mod_musicon_syntax%
EQUS "Syntax: *MusicOn"
EQUB 0
a ALIGN
.mod_musicon_help%
d=EQUS "*MusicOn switches the background Tracker music on."
EQUB 0
f ALIGN
.mod_musicoff%
STMFD R13!,{R0-R8,R14}
LDR R4,mod_lock%
SWI "Tracker_Pause"
MOV R0,#0
SWI "Tracker_SetPos"
LDMFD R13!,{R0-R8,PC}
.mod_musicoff_syntax%
EQUS "Syntax: *MusicOff"
EQUB 0
s ALIGN
.mod_musicoff_help%
v?EQUS "*MusicOff switches the background Tracker music off."
EQUB 0
x ALIGN
.mod_musicpause%
STMFD R13!,{R0-R8,R14}
LDR R4,mod_lock%
SWI "Tracker_Pause"
LDMFD R13!,{R0-R8,PC}
.mod_musicpause_syntax%
EQUS "Syntax: *MusicPause"
EQUB 0
ALIGN
.mod_musicpause_help%
;EQUS "*MusicPause pauses the background Tracker music."
EQUB 0
ALIGN
.mod_autoplay%
EQUD 1
.mod_lock%
EQUD 0
.mod_tunelength%
EQUD 0
.mod_tunestart%
"OS_File",&FF,tune$,mod_tunestart%+base%
P%+=lenbytes%:O%+=lenbytes%
pass%
&!(mod_tunelength%+base%)=lenbytes%
ap%
!(mod_autoplay%+base%)=1
!(mod_autoplay%+base%)=0
"OS_File",&A,f$,&FFA,,base%,base%+P%
release_rma(base%)
monitor:oldmode%=
track%
workspc%=0
tellemoff("You must have a tune loaded first!"):
I%=0
fontlen%-1:
font%?I%:
"Tracker_TuneInfo",,,,,lock%
len%,voices%,speed%,name$,a%
0,0);"Track: "+name$
48,1);"Voices: "+
voices%+" Speed: "+
speed%
48,2);"Patterns: "+
len%+
len%)," ")+" Volume: "+
~cvol%
48,3);"Position: 0 of: "+
(len%-1)+
(len%-1))," ")+" Event: 0"
12,5);"Pitch Acc Pitch Inc Byte Off Samp Len Samp No Volume Period"
"OS_Heap",1,buff%
,,,size%
0,20);"Buffer size currently &"+
~size%+" bytes."
0,21);"Module loaded at &"+
~workspc%+", length &"+
~lenbytes%
0,29);"System PlayTrack by David J. Seery"
0,31);
geticondata(infowind%,15);
"Tracker_ReadPos"
cp%,ev%
48,3);"Position: "+
cp%)," ")+" of: "+
(len%-1)+
(len%-1))," ")+" Event: "+
"Tracker_SoundInfo",pointer%
I%=0
224
32:track%=I%/32
0,6+track%);"Channel "+
track%
acc%=pointer%!I%:inc%=pointer%!(I%+4):slen%=pointer%!(I%+12):sno%=pointer%!(I%+16):vol%=pointer%!(I%+20):note%=pointer%!(I%+24):per%=pointer%!(I%+28)
"OS_ConvertHex8",acc%,pointer%+300,100:acc$=
rtoz(pointer%+300)
"OS_ConvertHex8",inc%,pointer%+300,100:inc$=
rtoz(pointer%+300)
"OS_ConvertHex8",acc%>>>16,pointer%+300,100:loop$=
rtoz(pointer%+300)
"OS_ConvertHex8",slen%,pointer%+300,100:slen$=
rtoz(pointer%+300)
"OS_ConvertHex8",sno%,pointer%+300,100:sno$=
rtoz(pointer%+300)
"OS_ConvertHex8",255-vol%,pointer%+300,100:vol$=
rtoz(pointer%+300)
"OS_ConvertHex8",per%,pointer%+300,100:per$=
rtoz(pointer%+300)
12,6+track%);acc$+" "+inc$+" "+loop$+" "+slen$+" "+sno$+" "+vol$+" "+per$
(10*track%)+3,15);
note(note%)
x%,y%,z%:
z%<>0
("Alphabet Latin1")
"Wimp_SetMode",oldmode%
note(val%)
val%
1 : ="C-1"
2 : ="C#1"
3 : ="D-1"
4 : ="D#1"
5 : ="E-1"
6 : ="F-1"
7 : ="F#1"
8 : ="G-1"
9 : ="G#1"
10: ="A-1"
11: ="A#1"
12: ="B-1"
13: ="B#1"
14: ="C-2"
15: ="C#2"
16: ="D-2"
17: ="D#2"
18: ="E-2"
19: ="F-2"
20: ="F#2"
21: ="G-2"
22: ="G#2"
23: ="A-2"
24: ="A#2"
25: ="B-2"
26: ="B#2"
27: ="C-3"
28: ="C#3"
29: ="D-3"
30: ="D#3"
31: ="E-3"
32: ="F-3"
33: ="F#3"
34: ="G-3"
35: ="G#3"
36: ="A-3"
="0-0"
buff%>0
release_rma(buff%)
loadcd(f$)
ptr%
cdir$=f$+".CD"
ptr%=0
gettracks(cdir$)
#cdpos%=0:cding%=
:cdmax%=ptr%-1
tracker_loadit(cdir$+"."+cd$(cdpos%))
donezero%=
:rand%=
gettracks(dir$)
next%,num%
next%=0
next%<>-1
"OS_GBPB",10,dir$,pointer%,1,next%,400,"*"
,,,num%,next%
num%>0
pointer%?&10=1
/ cd$(ptr%)=
rtoz(pointer%+&14):ptr%+=1
nextcd
&cdpos%+=1:
cdpos%>cdmax% cdpos%=0
tracker_loadit(cdir$+"."+cd$(cdpos%))
donezero%=
swi(swi$)
"XOS_SWINumberFromString",,swi$
num%;flags%
(flags%
1)=1
num%=-1
=num%
mutechan(chan%)
ch%(chan%)=
ch%(chan%)
ch%(chan%)
puticonsprite(control%,20+chan%,"opton")
"Tracker_RestoreChannel",chan%+1,,,,lock%
puticonsprite(control%,20+chan%,"optoff")
"Tracker_MuteChannel",chan%+1,,,,lock%
loadpl(f$)
cdmax%=0:cdpos%=-1
cd$(cdmax%)=
cdmax%+=1
cdmax%-=1:
#j%:rand%=
%%cding%=
:donezero%=
:oldcdpos%=-1
next_pl
next_pl
cdpos%=
(cdmax%+1)-1
cdpos%=oldcdpos%:cdpos%=
(cdmax%+1)-1:
:oldcdpos%=cdpos%
tracker_loadit(cd$(cdpos%))
donezero%=